package com.sailfish.springbootdemo.service.db1;

import com.sailfish.springbootdemo.pojo.Result;
import com.sailfish.springbootdemo.pojo.db1.PcbaDevice;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import java.util.Date;

public interface PcbaDeviceService {

    /**
     * 查询
     *
     * @param pcbaDeviceTypeId
     * @param searchValue
     * @return
     */
    Result getAllPcbaDevice(Integer pcbaDeviceTypeId, String searchValue, Integer status, Integer pageSize, Integer page, Integer pcbaCompanyId, Integer pcbaWorkshopId, Integer pcbaProcessId, Integer isFilledUpkeep);

    /**
     * 删除
     *
     * @param pcbaDeviceId
     * @return
     */
    Result deleteById(Integer pcbaDeviceId);

    /**
     * 更新设备信息
     *
     * @param pcbaDevice
     * @return
     */
    Result updatePcbaDevice(PcbaDevice pcbaDevice);

    /**
     * 根据id查询
     *
     * @param pcbaDeviceId
     * @return
     */
    PcbaDevice getPcbaDeviceById(Integer pcbaDeviceId);

    /**
     * 新增或者更新，同时需要新增 参数设备关联表
     * @param data
     * @return
     */
    /*Result addOrUpdateDeviceAndParamRelated(String data);*/

    /**
     * 调整线体设备顺序
     *
     * @param type
     * @param pcbaLineId
     * @param pcbaDeviceId
     * @return
     */
    Result adjustDeviceSort(String type, Integer pcbaLineId, Integer pcbaDeviceId);

    /**
     * 新增或者更新设备的实际工艺能力
     *
     * @param data
     * @return
     */
    Result addOrUpdateTechAndParamRelatedActual(String data);

    /**
     * 根据 设备类型id、设备id和设备资源id 得到 工艺宣称能力 和 工艺实际能力
     *
     * @param pcbaDeviceId
     * @param pcbaDeviceResourceId
     * @param pcbaDeviceTypeId
     * @return
     */
    Result getTechParamValueAndTechParamValueActual(Integer pcbaDeviceId, Integer pcbaDeviceResourceId, Integer pcbaDeviceTypeId);

    /**
     * 根据设备类型id、设备资源id得到 基线能力
     *
     * @param pcbaDeviceTypeId
     * @param pcbaDeviceResourceId
     * @return
     */
    Result getPcbaParamValue(Integer pcbaDeviceTypeId, Integer pcbaDeviceResourceId);

    /**
     * 导出设备列表excel
     *
     * @return
     */
    Result exportDeviceListExcel(String searchValue, Integer status, Integer pcbaCompanyId, Integer pcbaWorkshopId, Integer pcbaProcessId, Integer isFilledUpkeep);

    /**
     * 导入设备保养计划列表excel
     *
     * @return
     */
    Result importDeviceUpkeepListExcel(MultipartFile file);

    /**
     * 审核
     *
     * @param paramsNotes
     * @param pcbaDeviceId
     * @param paramsStatus
     * @return
     */
    Result auditPcbaDevice(String paramsNotes, Integer pcbaDeviceId, Integer paramsStatus);

    /**
     * 将 没有工艺能力项的 离线 设备及所在线体的认证状态直接变成 认证通过
     */
    Result autoAuditDeviceAndLineWithoutTechParam(Integer pcbaDeviceId);

    /**
     * 高端线体设备超时闭环修改
     */
    Result handleHighLoopClose(Integer pcbaDeviceId, Integer loopCloseStatus, String loopCloseAuditReason);

    /**
     * 线体设备年限闭环修改
     */
    Result handleAgeLoopClose(Integer pcbaDeviceId, Integer ageCloseStatus, String ageCloseAuditReason);

    /**
     * 高端线体年限提交审核
     */
    Result goSubmitLoopClose(Integer pcbaDeviceId, Integer loopCloseMethod,String loopCloseRemark,String loopCloseFiles);

    /**
     * 设备年限提交审核
     */
    Result goSubmitAgeClose(Integer pcbaDeviceId, Integer ageCloseMethod,String ageCloseRemark,String ageCloseFiles);

    /**
     * 查询所有有资产编号的设备
     */
    Result queryAllAssetNumberDevices(String chooseCompanyAndWorkshop, String assetNumber, Integer handledType, Integer pcbaDeviceTypeId, Integer brandId, Integer brandTypeId, Integer page, Integer pageSize);

    /**
     * 新增一条审核记录
     */
    Result addDeviceAuditHistory(Integer pcbaDeviceId, Integer type, Integer closeMethod, String closeRemark, String closeFiles);
}
